package com.tsing.cli.common.ratelimiter.annotation;

import com.tsing.cli.common.ratelimiter.constant.CacheConstants;
import com.tsing.cli.common.ratelimiter.enums.LimitType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 限流注解
 *
 * @author TheTsing
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Limit {

    /**
     * 资源key，当limitType为key或key+ip时，key不能为空
     */
    String key() default "";

    /**
     * redis存储限流相关资源的key的前缀
     */
    String prefix() default CacheConstants.RATE_LIMIT_KEY_PREFIX;

    /**
     * 单位时间，单位秒
     */
    int period() default 1;

    /**
     * 单位时间内最大访问次数
     */
    int count() default 1;

    /**
     * 限流类型
     */
    LimitType limitType() default LimitType.METHOD;

}
